﻿@echo off
chcp 65001 >nul
echo ==========================================
echo         考试系统JMeter压力测试启动器
echo ==========================================
echo.

:: 检查JMeter安装路径
set JMETER_HOME=%USERPROFILE%\apache-jmeter-5.6.2
if not exist "%JMETER_HOME%\bin\jmeter.bat" (
    echo [错误] 未找到JMeter安装！
    echo 请将JMeter 5.6.2解压到: %JMETER_HOME%
    echo 或者修改此脚本中的JMETER_HOME变量
    echo.
    pause
    exit /b 1
)

:: 检查测试计划文件
if not exist "1111.jmx" (
    echo [错误] 未找到测试计划文件: 1111.jmx
    echo 请确保此文件在当前目录下
    echo.
    pause
    exit /b 1
)

:: 获取服务器地址和端口
echo 请输入测试服务器信息：
set /p SERVER_NAME="服务器地址 (默认: localhost): "
if "%SERVER_NAME%"=="" set SERVER_NAME=localhost

set /p SERVER_PORT="服务器端口 (默认: 8080): "
if "%SERVER_PORT%"=="" set SERVER_PORT=8080

set /p PROTOCOL="协议 (默认: http): "
if "%PROTOCOL%"=="" set PROTOCOL=http

echo.
echo 测试配置：
echo - 服务器: %PROTOCOL%://%SERVER_NAME%:%SERVER_PORT%
echo - 测试计划: 1111.jmx
echo.

:: 创建结果目录
if not exist "test_results" mkdir test_results
set TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set TIMESTAMP=%TIMESTAMP: =0%
set RESULT_DIR=test_results\%TIMESTAMP%
mkdir "%RESULT_DIR%"

echo 选择执行模式：
echo 1. GUI模式 (可视化界面，推荐调试使用)
echo 2. 命令行模式 (无界面，生成报告)
echo 3. 生成HTML报告 (基于已有结果)
set /p MODE="请选择模式 (1-3): "

if "%MODE%"=="1" goto GUI_MODE
if "%MODE%"=="2" goto CLI_MODE
if "%MODE%"=="3" goto REPORT_MODE
echo 无效选择，默认使用GUI模式
goto GUI_MODE

:GUI_MODE
echo.
echo [信息] 启动GUI模式...
echo 请在JMeter界面中：
echo 1. 检查测试计划配置
echo 2. 修改用户定义变量中的服务器信息
echo 3. 点击绿色启动按钮开始测试
echo.
"%JMETER_HOME%\bin\jmeter.bat" -t "1111.jmx"
goto END

:CLI_MODE
echo.
echo [信息] 启动命令行模式...
echo 结果将保存到: %RESULT_DIR%
echo.
"%JMETER_HOME%\bin\jmeter.bat" ^
    -n ^
    -t "1111.jmx" ^
    -l "%RESULT_DIR%\test_results.jtl" ^
    -e ^
    -o "%RESULT_DIR%\html_report" ^
    -JSERVER_NAME=%SERVER_NAME% ^
    -JSERVER_PORT=%SERVER_PORT% ^
    -JPROTOCOL=%PROTOCOL%

if %errorlevel%==0 (
    echo.
    echo [成功] 测试完成！
    echo 结果文件: %RESULT_DIR%\test_results.jtl
    echo HTML报告: %RESULT_DIR%\html_report\index.html
    echo.
    set /p OPEN_REPORT="是否打开HTML报告? (Y/N): "
    if /i "%OPEN_REPORT%"=="Y" start "" "%RESULT_DIR%\html_report\index.html"
) else (
    echo.
    echo [错误] 测试执行失败！
    echo 请检查服务器是否正常运行，或查看JMeter日志获取详细信息
)
goto END

:REPORT_MODE
echo.
echo 可用的测试结果：
dir /b test_results\*.jtl 2>nul
if %errorlevel%==1 (
    echo 未找到测试结果文件
    goto END
)
echo.
set /p JTL_FILE="请输入JTL文件名 (不含路径): "
if not exist "test_results\%JTL_FILE%" (
    echo 文件不存在: test_results\%JTL_FILE%
    goto END
)

set REPORT_DIR=%RESULT_DIR%\html_report_from_jtl
mkdir "%REPORT_DIR%"

"%JMETER_HOME%\bin\jmeter.bat" ^
    -g "test_results\%JTL_FILE%" ^
    -o "%REPORT_DIR%"

if %errorlevel%==0 (
    echo [成功] HTML报告生成完成！
    echo 报告位置: %REPORT_DIR%\index.html
    start "" "%REPORT_DIR%\index.html"
) else (
    echo [错误] 报告生成失败！
)
goto END

:END
echo.
echo ==========================================
echo              测试完成
echo ==========================================
echo.
echo 提示：
echo - 测试结果保存在 test_results 目录
echo - 如需重复测试，请重新运行此脚本
echo - 确保数据库中有足够的测试数据
echo.
pause 